package com.yami.shop.personnft.common.dao;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yami.shop.bean.model.User;
import com.yami.shop.common.util.PageParam;
import com.yami.shop.personnft.common.dto.PersonAllClassDto;
import com.yami.shop.personnft.common.model.PersonNft;
import com.yami.shop.personnft.common.vo.NftPersonVO;
import com.yami.shop.personnft.common.vo.PersonNftDtailfVo;
import com.yami.shop.personnft.common.vo.PersonNftStatisticsVo;
import com.yami.shop.personnft.common.vo.PersonTreeVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * personNft信息
 *
 * @author FrozenWatermelon
 * @date 2020-10-28 15:27:24
 */
public interface PersonNftMapper {

    /**
     * 获取持仓列表
     *
     * @param
     * @return 列表
     */
    List<PersonNft> listByParam(@Param("personNft") PersonNft personNft);

    /**
     * 获取分页持仓列表
     *
     * @param
     * @return 列表
     */
    IPage<PersonNft> page(PageParam page, @Param("personNft") PersonNft personNft);

    /**
     * 获取持仓数量
     *
     * @param
     * @return 列表
     */
    Integer listByParamCount(@Param("personNft") PersonNft personNft);

    /**
     * 用户转增 可转数量与不可转时
     *
     * @param personNft
     * @return
     */
    Map<String, Integer> listByParamTransferOtherCount(@Param("personNft") PersonNft personNft);
    Map<String, Integer> listByParamTransferCount(@Param("personNft") PersonNft personNft);
    /**
     * 用户划转 可转数量与全部数量
     *
     * @param personNft
     * @return
     */
    Map<String, Long> listByParamTransferToOtherCount(@Param("personNft") PersonNft personNft);

    /**
     * 用户转增随机获取count数量非冻结木商品持仓
     *
     * @param userId
     * @param productId
     * @param count
     * @return
     */
    List<PersonNft> getlistByParamCountLimit(@Param("userId") String userId, @Param("productId") Long productId, @Param("count") Integer count);

    /**
     * 用户划转随机获取count数量非冻结且大于t+n木商品持仓
     *
     * @param userId
     * @param productId
     * @param count
     * @return
     */
    List<PersonNft> getTransferlistByParamCountLimit(@Param("userId") String userId, @Param("productId") Long productId, @Param("day") Integer day, @Param("count") Integer count);


    /**
     * 根据信息id获取
     *
     * @param
     * @return 信息
     */
    PersonNft getById(@Param("id") String id);

    /**
     * 保存
     *
     * @param 信息
     */
    void save(@Param("personNft") PersonNft personNft);

    /**
     * 更新信息
     *
     * @param 信息
     */
    void update(@Param("personNft") PersonNft personNft);

    /**
     * 根据信息id删除
     *
     * @param id
     */
    void deleteById(@Param("id") String id);

    /**
     * 批量保存
     *
     * @param 信息
     */
    void saveBatch(@Param("list") List<PersonNft> list);

    /**
     * 批量修改
     *
     * @param 信息
     */
    void updateStatusBatchById(@Param("list") List<PersonNft> list);

    /**
     * 根据id 修改状态
     *
     * @param personIds
     * @param status
     */
    void updatePersonNftStatus(@Param("ids") List<String> personIds, @Param("status") Integer status);

    /**
     * 更新全部信息
     *
     * @param 信息
     */
    void updateBatchById(@Param("list") List<PersonNft> list);

    /**
     * 批量修改remark
     *
     * @param 信息
     */
    void updateBatchByTokenId(@Param("list") List<PersonNft> list);

    /**
     * 展厅分类显示 通过商品分组
     *
     * @param personNft
     * @return
     */
    IPage<Map<String, Object>> getAllClassList(@Param("page") PageParam page, @Param("personNft") PersonNft personNft);

    /**
     * mall4j持仓查询
     * @param page
     * @param personNft
     * @return
     */
    IPage<Map<String, Object>> getAllClassList2(@Param("page") PageParam page, @Param("personNft") PersonNft personNft);
    List<PersonTreeVO> getAllClassTreeList(@Param("personNft") PersonNft personNft);
    List<PersonTreeVO> getAllClassTreeList2(@Param("personNft") PersonNft personNft);
    /**
     * 商品对应币获取详情
     *
     * @param prodId
     * @return
     */
    Map<String, Object> getOneClass(@Param("productId") Long productId);

    /**
     * 商品获取详情
     *
     * @param personNft
     * @return
     */
    PersonNftDtailfVo getOneDetail(@Param("personNft") PersonNft personNft);

    PersonNftDtailfVo getOneDetail1(@Param("personNft") PersonNft personNft);

    List<PersonNft> getListByIds(@Param("ids") String[] ids);


    List<PersonNft> getListByTokenIdsAnduserId(@Param("tokenIds") List<String> tokenIds, @Param("userId") String userId);

    List<PersonNft> getPersonNftDataList(@Param("personIds") List<String> personIds);

    List<PersonNftStatisticsVo> getPersonNftStatistics(@Param("user") User user);

    List<NftPersonVO> getPersonNftByUserId(@Param("personNft") NftPersonVO personNft);

    IPage<PersonAllClassDto> getAllClassListByShop(@Param("page") PageParam<PersonNft> page,@Param("personNft") PersonNft personNft);
}
